﻿using System.Runtime.InteropServices;

namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu.Types
{
    [StructLayout(LayoutKind.Sequential)]
    struct GpuCharacteristics
    {
        public int  Arch;
        public int  Impl;
        public int  Rev;
        public int  NumGpc;
        public long L2CacheSize;
        public long OnBoardVideoMemorySize;
        public int  NumTpcPerGpc;
        public int  BusType;
        public int  BigPageSize;
        public int  CompressionPageSize;
        public int  PdeCoverageBitCount;
        public int  AvailableBigPageSizes;
        public int  GpcMask;
        public int  SmArchSmVersion;
        public int  SmArchSpaVersion;
        public int  SmArchWarpCount;
        public int  GpuVaBitCount;
        public int  Reserved;
        public long Flags;
        public int  TwodClass;
        public int  ThreedClass;
        public int  ComputeClass;
        public int  GpfifoClass;
        public int  InlineToMemoryClass;
        public int  DmaCopyClass;
        public int  MaxFbpsCount;
        public int  FbpEnMask;
        public int  MaxLtcPerFbp;
        public int  MaxLtsPerLtc;
        public int  MaxTexPerTpc;
        public int  MaxGpcCount;
        public int  RopL2EnMask0;
        public int  RopL2EnMask1;
        public long ChipName;
        public long GrCompbitStoreBaseHw;
    }

    struct CharacteristicsHeader
    {
#pragma warning disable CS0649
        public long BufferSize;
        public long BufferAddress;
#pragma warning restore CS0649
    }

    [StructLayout(LayoutKind.Sequential)]
    struct GetCharacteristicsArguments
    {
        public CharacteristicsHeader Header;
        public GpuCharacteristics    Characteristics;
    }
}
